How to learn to be a good programmer
Quora: Do you find yourself in a situation where even the best programmers and engineers "don't know what they are doing" or "don't know what they don't know"? How do you deal with or resolve it? respondent
Yuki Sonoda, Software Engineer at Niantic Labs (2018-present)
When we do things in areas where we are a little inexperienced, we get into a state of "I don't know what I'm doing," "[I don't understand.
How to deal with such a situation to get out of it.
First, try and move it.
next to a systematic understanding of the concept.
Then a comprehensive understanding of real-world examples and available resources.
Finally, we need to create opportunities to practice and acquire the skills.
guidance documents like tutorial or Getting Started Scenarios like the one in the tutorial are relatively small, boring examples... This gives me a false sense of confidence that I can understand them without moving my hands, and I'm tempted to skip them, but I'll hold it in and foolishly follow the steps as described in the tutorial.
When you actually try your hand at a tutorial, you may stumble upon a wrong assumption about something minor, or some unknown terminology that you don't understand. When you get to this point, you are only half a step away from "I don't know what I don't know".
The next step is to understand the concept, using the stumbling blocks and unknown terms experienced earlier as clues.
When you are in a state of not knowing what you are doing, what you really need to know is not how to do it.
What is the structure of the technology and tools and how are they connected?
... While it is important to talk about concepts, if you suddenly get into this, it becomes too abstract to know what you are talking about or why the abstraction is useful. So to prevent this, it is helpful to have experienced a small example in the first step. Examples and Coverage
However, an understanding learned by reading only abstract concepts is fragile. It is not backed up by real-life examples, so it can be overlooked unexpectedly and forgotten quickly. Also, even if you have a vague understanding of the concept and have an idea of where the solution lies, you may be at a loss as to what exactly to do with it.
So, the next thing to do is to read good examples and also cover the resources available.
If you are learning a new language, read the entire standard library reference from the beginning. By doing so, you will learn a wealth of real-world examples of how the language elements you just read about in the "Understanding Concepts" step are used in actual library design. Also, understanding the standard library will help you when writing code in the language, because you will know what is available to you when you write code in the language.
... Naturally, you will not be able to get everything in your head after reading it once. However, the process of reading through it will build a rough table of contents in your mind, and it is beneficial to read a large number of good use cases of language functions.
Acquire
After you get this far, you can do a little problem-solving while doing your own research. Now all you have to do is actually try it and gain experience.
... It is normal for new things to emerge during this process that are not clear to us, at which point we go back to the previous step to organize our conceptual understanding and review what we have forgotten.
Goals are clarified.
Goals are achievable.
I have a broad overview of the whole picture.
Summary
First, try it out and get it moving. Experiencing stumbling blocks by moving your hands will give you clues as to what you don't understand, and having an image of what is working will motivate you to learn a new technique.
Next, understand the concepts systematically. It is important to understand the background concepts and their connections, as simply learning how to move things around a bit is difficult to apply. It is preferable to refer to organized materials here, so if you have a good book, make good use of it.
Then, get a comprehensive understanding of the real-world examples and resources available. The goal is to back up the concepts you understand with real examples and to increase the number of hands available for the next step.
Finally, practice. When you get to this point, you will know what you don't know, you just need to gain experience.
https://gyazo.com/32e35dea6746782718313b204a15b626
p.v
---
This page is auto-translated from /nishio/出来るプログラマの学び方 using DeepL. If you looks something interesting but the auto-translated English is not good enough to understand it, feel free to let me know at @nishio_en. I'm very happy to spread my thought to non-Japanese readers.